package com.framework.service;

import com.baomidou.mybatisplus.service.IService;
import com.framework.dto.AcceptKaYouDTO;
import com.framework.entity.log.LogAccount;
import com.framework.entity.log.LogTranInfo;
import com.framework.entity.sys.SysDept;
import com.framework.entity.tran.TranBenefitDay;
import com.framework.entity.tran.TranTransactionInfo;
import com.framework.page.PageUtils;
import com.framework.view.LiShuaYajin;
import com.framework.view.LishuaTran;
import com.framework.view.SeparatMonthView;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 功能描述: 交易接口
 * @author ck
 * @date 2018/8/28 19:46
 */
public interface TransactionInfoService extends IService<TranTransactionInfo> {

	/**
	 * 查询首页交易数据
	 * @param token
	 * @param type
	 * @return
	 */
	Map<String,Object> getIndexTransaction(String token, Integer type);

	/**
	 *交易总额
	 * @param agentId 代理商ids
	 * @param type 1:团队交易  2:本月团队交易
	 * @param isOwn
	 * @return
	 */
	BigDecimal queryTransactionSum(Long agentId, int type,Integer isOwn);

	/**
	 * 收益信息
	 * @param token 当前登录人token
	 * @return
	 */
	Map<String,Object> getIncomeMap(String token);

	/**
	 * 拓展信息
	 * @param token 当前登录人token
	 * @param type
	 * @return
	 */
	Map<String,Object> getExpandMap(String token, Integer type);

	/**
	 * 自营、团队收益分润明细列表
	 * @param token
	 * @param terminalType
	 * @param types
	 * @param pageNo
	 * @return
	 */
	List<SeparatMonthView> queryTradeSeparationList(String token, Integer terminalType, Integer types,Integer pageNo);

	/**
	 * 分润天数据记录 根据月份
	 * @param agentId
	 * @param month
	 * @return
	 */
	List<TranBenefitDay> listDayList(Long agentId, String month);

	/**
	 * 分润天数据记录 根据开始时间
	 * @param agentId
	 * @param start
	 * @return
	 */
	List<TranBenefitDay> listDayList(Long agentId, Integer start);

	/**
	 * 交易管理明细
	 * @param token
	 * @param agentId
	 * @param types
	 * @param pageNo
	 * @return
	 */
	Map<String,Object> queryTransactionTimeMap(String token, Long agentId, String types,Integer pageNo);


	/**
	 * 根据id查询团队交易量
	 * @param agentId
	 * @return
	 */
	BigDecimal queryLMonthTranSum(Long agentId);


	/**
	 * 插入数据
	 * @param fileName
	 * @param file
	 * @param deptId
	 * @return
	 * @throws IOException
	 */
	Integer insertTransaction(String fileName, MultipartFile file, Long deptId) throws IOException;


	/**
	 *查询列表
	 * @param params
	 * @return
	 */
	PageUtils queryTranList(Map<String,Object> params);

	/**
	 * 卡友数据录入
	 * @param sessionId
	 * @param accountId
	 * @param expInfo
	 */
	void addTransactionKaYou(String sessionId,Long accountId,String expInfo);

	/**
	 * 新创的开店宝，和卡友的后台基本差不多
	 * @param sessionId
	 * @param accountId
	 * @param expInfo
	 */
	void addTransactionKaiDianBao(String sessionId,Long accountId,String expInfo);


	/**
	 * 个人交易数据详细
	 * @param params
	 * @return
	 */
	Map<String,Object> queryPersonAmountDetail(Map<String,Object> params);

	/**
	 * 个人交易详情
	 * @param params
	 * @return
	 */
	PageUtils queryPersonTradeDetail(Map<String,Object> params);

	/**
	 * 了刷机交易导入
	 * @param sessionId
	 * @param accountId
	 * @param expInfo
	 */
	void addTransactionLeShua(String sessionId,Long accountId,String expInfo);
	/**
	 * 乐刷大POS交易导入
	 * @param sessionId
	 * @param accountId
	 * @param expInfo
	 */
	void addTransactionLeShuaBig(String sessionId,Long accountId,String expInfo);

	/**
	 * 瑞和宝交易导入
	 * @param sessionId
	 * @param accountId
	 * @param expInfo
	 */
	void addTransactionRuiHeBao(String sessionId,Long accountId,String expInfo);

	/**
	 * 查询代理商下面的终端交易的账号
	 * @param terminalType
	 * @return
	 */
	List<LogAccount> queryTerAccountList(Integer terminalType);

	/**
	 *  增加终端交易录入日志
	 * @param log
	 */
	void insertTerLog(LogTranInfo log);

	/**
	 * 添加失败日志
	 * @param explainsInfo 失败说明
	 * @param accountId 账户id
	 */
	void insertFailTerLog(String explainsInfo,Long accountId);

	/**
	 * 乐刷vip充值会员返现
	 * @param sessionId
	 * @param accountId
	 * @param expInfo
	 */
	void addLeShuaVip(String sessionId,Long accountId,String expInfo);

	/**
	 * 所有交易额
	 * @param params
	 * @return
	 */
	String querytotalAmount(Map<String,Object> params);

	/**
	 * 根据sn和起止时间查询交易列表 app
	 * @param sn
	 * @param startDate
	 * @param endDate
	 * @return
	 */
    List<Map<String, Object>> queryListBySn(String sn, String startDate, String endDate);

	/**
	 * 商户详情页面的 交易列表 app
	 *
	 * @param sn
	 * @param startDate
	 * @param endDate
	 * @return
	 */
	Map<String, Object> queryTranListBySn(String sn, String startDate, String endDate);

	/**
	 * 添加乐刷大pos交易
	 * @param data
	 * @param sign
	 * @return
	 */
	String addTransactionByLeShuaBig(String data, String sign);
	/**
	 * 根据sn查询昨天的交易
	 * @param sn
	 * @param benefitDateStr
     * @param deptId
	 * @return
	 */
	List<TranTransactionInfo> queryYesterdayListBySn(String sn, String benefitDateStr, Long deptId);
	/**
	 * 根据sn和起止时间查询，取起不取止
	 * @param sn
	 * @param endDate
	 * @return
	 */
	List<TranTransactionInfo> queryListBySnAndTime(String sn, Date endDate);

	/**
	 * 查询星pos交易
	 * @param sdTermNo
	 * @param txnDate
	 * @param txnAmt
	 * @param txnStatus
	 * @param txnLogId
	 * @return
	 */
    Map<String, Object> getStarPosTransaction(String sdTermNo,String txnDate, String txnAmt, String txnStatus, String txnLogId);

	/**
	 * 添加乐刷大pos交易
	 * @param data
	 * @param sign
	 * @return
	 */
	String addTransactionByLeShuaBigSn(String data, String sign);

	/**
	 * 根据sn和开始时间查询交易总额
	 * @param sn
	 * @param startDate
	 * @return
	 */
	Map<String,Object> querySumTranBySn(String sn,Date startDate);

	/**
	 * 添加考拉交易
	 * @param fileName
	 * @param file
	 * @param deptId
	 * @return
	 */
	Integer insertKaoLatran(String fileName, MultipartFile file, Long deptId);

	/**
	 * 立刷押金导入
	 * @param liShuaYajin
	 * @return
	 */
    Map<String, String> getLishuaYajin(LiShuaYajin liShuaYajin);

	/**
	 * 立刷交易导入
	 * @param lishuaTran
	 * @return
	 */
	Map<String, String> getLishuaTran(LishuaTran lishuaTran);



	/**
	 * 根据id列表删除交易
	 * @param ids
	 * @return
	 */
	Map<String,Object> deleteTranByIds(Long[] ids);

	/**
	 * 添加通联的交易
	 * @param fileName
	 * @param file
	 * @param deptId
	 * @return
	 */
    Integer insertTLTransaction(String fileName, MultipartFile file, Long deptId);

	/**
	 * 获取拓展信息
	 * @param token
	 * @param type
	 * @return
	 */
	Map<String, Object> getExpandInfo(String token, Integer type);

	/**
	 * 获取首页交易
	 * @param token
	 * @param type
	 * @return
	 */
	Map<String, Object> getIndexTran(String token, Integer type);

	/**
	 * 获取交易以及求和
	 * @param sn
	 * @return
	 */
	List<String> queryTranAndSumList(String sn);

	/**
	 * 接收卡友
	 * @param flowNo
	 * @param timeStamp
	 * @param acceptKey
	 * @param sign
	 * @param acceptKaYouDTO
	 * @return
	 */
    Map<String,String> acceptKaYou(String flowNo,String timeStamp,String acceptKey,String sign,AcceptKaYouDTO acceptKaYouDTO);

	/**
	 * 导入闪银交易
	 * @param sessionId
	 * @param accountId
	 * @param expInfo
	 */
    void addTransactionShanyin(String sessionId, Long accountId, String expInfo);

	/**
	 * 根据报备计算分润
	 * @param dept
	 * @param benefitDate
	 */
    void benefitByMerchant(SysDept dept,String benefitDate);

	List<Map<String, Object>> queryTranByAgentAndMonth(Long agentId, String s);

	List<Map<String, Object>> querySumTranByAgentAndMonth(Long agentId, String s);

	BigDecimal querySumTran(Long agentId, String month);
}

